﻿namespace ConsoleApp;

public class DemoFileSystemWatcher
{
    //自动备份、日志记录、实时同步等功能,注意: 在高负载或高并发的情况下可能无法捕获所有文件系统事件。
    public static void Main()
    {
        // 创建FileSystemWatcher对象并设置要监视的目录
        using var watcher = new FileSystemWatcher();
        //确保应用程序有足够的权限来访问和监控指定的文件夹
        watcher.Path = @"D:\data";

        // 设置监视的文件类型
        watcher.Filter = "*.txt";

        // 设置监控的事件类型
        watcher.NotifyFilter = NotifyFilters.LastWrite
                               | NotifyFilters.FileName
                               | NotifyFilters.DirectoryName;

        // 监视子目录
        watcher.IncludeSubdirectories = true;

        // 只当需要时启动监控
        watcher.EnableRaisingEvents = true;

        // 定义事件处理器
        watcher.Created += OnChanged;
        watcher.Deleted += OnChanged;
        watcher.Changed += OnChanged;
        watcher.Renamed += OnRenamed;

        // 等待用户退出程序
        Console.WriteLine("监控启动，按任意键退出...");
        Console.ReadKey();

        // 关闭监控
        watcher.EnableRaisingEvents = false;
    }

    // 事件处理器
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // 打印发生的事件
        Console.WriteLine($"{e.FullPath} - {e.ChangeType}");
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // 打印重命名事件
        Console.WriteLine($"从 {e.OldFullPath} 重命名为 {e.FullPath}");
    }
}